<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        .box {
            width: 90%;
            margin: 0 auto;
            overflow: hidden;
            position: relative;
        }

        ul {
            display: flex;
            position: relative;
            left: 0;
            transition: left .2s linear;
        }

        ol {
            display: flex;
            position: absolute;
            bottom: 10px;
            width: 100%;
            left: 0;
            justify-content: center;
        }

        ol>li {
            width: 10px;
            height: 10px;
            background-color: #fff;
            margin: 0 8px;
        }

        ol>li.action {
            background-color: black;
        }

        img {
            border-radius: 5px;
            display: block;
        }

        .boximg {
            width: 90vw;

        }
    </style>
</head>

<body>
    <div class="box">
        <ul>
            <!-- <li>
                <img src="" alt="">
            </li> -->
        </ul>
        <ol>
            <!-- <li></li> -->
        </ol>
    </div>
    <script>
        var image = ["https://m15.360buyimg.com/mobilecms/s1062x420_jfs/t1/33428/39/16450/106681/6311cad7Ef9b3d856/f10720b7f8f38937.jpg!cr_1053x420_4_0!q70.jpg",
            "https://m15.360buyimg.com/mobilecms/jfs/t1/3230/40/20384/44107/62daf2d9E5c5e0e55/03ab360c40ddc266.jpg!cr_1125x449_0_166!q70.jpg",
            "https://m15.360buyimg.com/mobilecms/jfs/t1/110775/22/28940/94917/62e5bc6dE569b2244/5d14fc9f06d87341.jpg!cr_1125x449_0_166!q70.jpg",
            "https://m15.360buyimg.com/mobilecms/s1062x420_jfs/t1/33428/39/16450/106681/6311cad7Ef9b3d856/f10720b7f8f38937.jpg!cr_1053x420_4_0!q70.jpg",];

        var ul = document.querySelector(".box > ul");
        var ol = document.querySelector(".box > ol");
        var box = document.querySelector(".box");

        var str = "", str1 = "";
        for (let k = 0; k < image.length; k++) {
            str += `<li><img class="boximg" src="${image[k]}" alt=""></li>`;
            if (k == 0) {
                str1 += `<li class="action"></li>`
            } else if (k < image.length - 1) {
                str1 += `<li></li>`
            }
        }
        ul.innerHTML = str;
        ol.innerHTML = str1;
        ul.style.width = image.length * box.offsetWidth + "px";

        var ollis = document.querySelectorAll(".box > ol > li")
        var i = 0;
        var start = 0;
        box.ontouchstart = function (e) {
            start = parseInt(e.touches[0].clientX);
        }
        box.ontouchend = function (e) {
            var end = parseInt(e.changedTouches[0].clientX);
            if (start > end) {
                i++;
                // 因为有段代码设置了动画时间的取消,所以在每次执行ul移动时,都重新加上动画时间
                ul.style.transitionDuration = "0.2s";
                var l = i * -box.offsetWidth;
                ul.style.left = l + "px";
                // 显示的是重复的第一章的时候
                // 需要瞬间在移动到第一章
                if (i == image.length - 1) {
                    // 先让i走
                    i = 0; //i是记录当前显示图片索引值的
                    // 等上面的动画执行完再设置
                    setTimeout(function () {
                        // 设置取消动画时间,让ul瞬间移动端到第一张
                        ul.style.transitionDuration = "0s";
                        ul.style.left = "0px";
                    }, 200)
                }
            } else {
                i--;
                if (i < 0) {
                    i = 2;
                    ul.style.transitionDuration = "0s";
                    var l = 3 * -box.offsetWidth;
                    ul.style.left = l + "px";
                    setTimeout(function () {
                        ul.style.transitionDuration = "0.2s";
                        var l = i * -box.offsetWidth;
                        ul.style.left = l + "px";
                    }, 10)
                } else {
                    ul.style.transitionDuration = "0.2s";
                    var l = i * -box.offsetWidth;
                    ul.style.left = l + "px";
                }
            }
            for (let m = 0; m < ollis.length; m++) {
               ollis[m].classList.remove("action"); 
            }
            ollis[i].classList.add("action");
        }
    </script>
</body>

</html>